package cn.com.git.example.module.service;

import cn.com.git.example.common.ResultMsg;
import cn.com.git.example.common.auth.AuthenticationDTO;
import cn.com.git.example.common.auth.AuthenticationTokenDTO;
import cn.com.git.example.common.auth.LoginProcessDTO;
import cn.com.git.example.common.auth.LoginStatusDTO;

import javax.servlet.http.HttpServletRequest;

/**
 * @author zhangzhenfu
 * @Description
 * @date 2021/3/6 0006 9:26
 */
public interface AuthenticationService {

    /*=================================*/
    /*============ 鉴权 =============*/
    /*=================================*/

    /**
     * 账号密码验证
     * @param account
     * @param password
     * @return
     */
    ResultMsg<AuthenticationDTO> loginByPassword(String account, String password);

    /**
     * 验证码验证
     * @param loginProcessDTO
     * @param verifyCode
     * @param request
     * @return
     */
    ResultMsg<AuthenticationDTO> loginByVerifyCode( LoginProcessDTO loginProcessDTO,String verifyCode, HttpServletRequest request);

    /**
     * 创建令牌
     * @param authenticationDTO 鉴权信息
     * @return
     */
    String createToken(AuthenticationTokenDTO authenticationDTO) ;

    /*=================================*/
    /*============ 登录过程 =============*/
    /*=================================*/

    /**
     * 添加 登录过程
     * @param loginProcessSessionId 登录会话id
     * @param loginProcess 登录会话
     * @return
     */
    void addLoginProcess(String loginProcessSessionId, LoginProcessDTO loginProcess);

    /**
     * 查询 登录过程
     * @param loginProcessSessionId 登录会话id
     * @return
     */
    LoginProcessDTO findLoginProcess(String loginProcessSessionId);

    /**
     * 更新 登录过程
     * @param loginProcessSessionId 登录会话id
     * @param loginProcess
     */
    void modifyLoginProcess(String loginProcessSessionId, LoginProcessDTO loginProcess);

    /**
     * 移除 登录过程
     * @param loginProcessSessionId 登录会话id
     * @return
     */
    void removeLoginProcess(String loginProcessSessionId);

    /*============================================*/
    /*=================登录状态===================*/
    /*============================================*/

    /**
     * 获取 登录状态
     *
     * @param account
     * @return
     */
    LoginStatusDTO getLoginStatus(String account);

    /**
     * 设置 登录状态
     *
     * @param account
     * @param loginStatus
     */
    void setLoginStatus(String account, LoginStatusDTO loginStatus);
    /**
     * 修改 登录状态
     *
     * @param account
     * @param loginStatus
     */
    void modifyLoginStatus(String account, LoginStatusDTO loginStatus);
    /**
     * 移除 登录状态
     *
     * @param account
     */
    void removeLoginStatus(String account);

}
